package com.process.two;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * D:\main.txt
 */
public class Consumer {

    public static void main(String[] args) throws IOException {

        // 创建共享内存文件
        File sharedMemoryFile = new File("D:\\main.dat");
        RandomAccessFile randomAccessFile = new RandomAccessFile(sharedMemoryFile, "rw");
        FileChannel channel = randomAccessFile.getChannel();

        // 映射共享内存
        MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 1024);

        // 消费者线程

            int lastPosition = 0; // 上一次读取的位置
            while (true) {
                // 判断缓冲区中是否有新的数据可供读取
                if (buffer.position() > lastPosition) {
                    // 从共享内存中读取新的数据
                    int newDataSize = buffer.position() - lastPosition;
                    byte[] data = new byte[newDataSize];
                    buffer.position(lastPosition);
                    buffer.get(data);
                    String receivedData = new String(data);
                    System.out.println("Consumed: " + receivedData);
                    // 更新上一次读取的位置
                    lastPosition = buffer.position();

                    // 进行消费数据的处理
                    // ...
                }
                System.out.println("sf");
                // 等待一段时间，避免过于频繁地读取共享内存
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }





    }

}

//        // 打开共享内存文件
//        FileChannel channel = FileChannel.open(
//                java.nio.file.Paths.get("D:\\main.txt"),
//                StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.CREATE);
//
//        // 映射共享内存
//        MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 1024);
//
//        // 从共享内存中读取数据
//        while (true) {
//            byte[] bytes = new byte[1024];
//            buffer.get(bytes);
//
//            String data = new String(bytes);
//            System.out.println("Received: " + data);
//
//            // 如果接收到的是 exit，退出循环
//            if (data.trim().equals("exit")) {
//                break;
//            }
//        }
//
//        // 取消映射共享内存
//        channel.close();



